#include <iostream>
#include <string>

struct SmallStruct {
    SmallStruct() { std::cout << "SmallStruct()" << std::endl; }
};

struct BaseStruct {
    BaseStruct() { std::cout << "BaseStruct()" << std::endl; }
};


struct MyStruct : BaseStruct{
    int a = 10;
    float b = 5.5f;
    std::string c = "abc";
    float d;

    SmallStruct ss;

    MyStruct(int param) : a(param), d(b)
    { 
        std::cout << "MyStruct(int param)" << std::endl;
        c = "bcd";
    }
};

struct Base
{
    Base() = default;
    Base(int a) {}
    Base(int a, int b) {}
    Base(int a, int b, int c) {}
    Base(int a, int b, int c, int d) {}
    Base(int a, int b, int c, int d, int f) {}

    void Method() {std::cout << "Base::Method()" << std::endl;}
};

struct Derive : Base
{
    using Base::Base;
    void Method(int) {std::cout << "Derive::Method(int)" << std::endl;}
};


int main() {
    MyStruct myStruct(1);

    Base b(1, 2, 3, 4);
    Derive d(1);

    //d.Method();
    return 0;
}